/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package state.implementacoes;

import model.Jogador;
import model.ListaJogadores;
import servidorRMI.AddObservadorImp;
import state.interfaces.State;
import strategy.ListaCampos;
import strategy.modelos.Campo;

/**
 *
 * @author Lucas
 */
public class Generica implements State {

    private Jogador jogador;
    private ListaCampos listaCampos;
    private ListaJogadores listaJogadores;

    public Generica(Jogador jogador) {
        this.jogador = jogador;
        listaCampos = ListaCampos.getInstancia();
        listaJogadores = ListaJogadores.getInstancia();
    }

    @Override
    public void comprar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void vender() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void lancarDados(int dadoUm, int dadoDois) {
        int soma = dadoDois + dadoUm;
        //Muda o peao de lugar...
        if ((jogador.getLocal() + soma) > 39) {
            jogador.setMoney(jogador.getMoney() + 200);
            AddObservadorImp.getInstancia().notificarMensagem(jogador.getName(), 
                    "Uma volta completa, receba R$ 200,00!");
            jogador.setLocal((jogador.getLocal() + soma) - 40);
        } else {
            jogador.setLocal((jogador.getLocal() + soma));
        }

        //verifica que tipo de campo o peao esta...
        Campo c = listaCampos.getListaCampos().get(jogador.getLocal());
        c.setJogador(jogador);
        c.acao();

        AddObservadorImp.getInstancia().notificar();

        //Chamar o proximo...
        if (jogador.getState() instanceof Comprando) {
            if (dadoUm == dadoDois) {
                jogador.incrementeVezesDados();
                jogador.setMinhaVez(true);
            }
        } else {
            if (dadoUm == dadoDois) {
                jogador.incrementeVezesDados();
            } else {
                listaJogadores.nextJogador();
                jogador.setVezesDados(0);
            }
        }
        AddObservadorImp.getInstancia().notificaProximo();
    }

    @Override
    public String cadastrar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void confirmar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
